/**
 * 按规则格式化日期：yyyy-MM-dd (HH)hh:mm:ss:SSS
 * @param {Date | String} date 日期
 * @param {String} rule 格式化规则
 */
export const dateFormater = (date, rule) => {
  date = new Date(date);
  let o = {
    'M+': date.getMonth() + 1, //月份
    'd+': date.getDate(), //日
    'h+': date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, //小时
    'H+': date.getHours(), //小时
    'm+': date.getMinutes(), //分
    's+': date.getSeconds(), //秒
    'q+': Math.floor((date.getMonth() + 3) / 3), //季度
    S: date.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(rule)) {
    rule = rule.replace(
      RegExp.$1,
      (date.getFullYear() + '').substr(4 - RegExp.$1.length)
    );
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(rule)) {
      rule = rule.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      );
    }
  }
  return rule;
};

/**
 * 格式化日期为YYYY-MM-DD
 * @param {Date} date
 * @return {String}
 */
export const formatDate = date => dateFormater(date, 'yyyy-MM-dd');

/**
 * 格式化时间为HH:mm
 * @param {Date} date
 * @return {String}
 */
export const formatTime = date => dateFormater(date, 'HH:mm');

/**
 * 格式化日期时间，去除秒：YYYY-MM-DD HH:mm
 * @param {Date} date
 * @return {String}
 */
export const formatTimeWithoutSecond = date =>
  dateFormater(date, 'yyyy-MM-dd HH:mm');

/**
 * 格式化日期时间为YYYY-MM-DD HH:mm:ss
 * @param {Date} date
 * @return {String}
 */
export const formatDatetime = date => dateFormater(date, 'yyyy-MM-dd HH:mm:ss');
